package com.sky.mapper;

import com.github.pagehelper.Page;
import com.sky.dto.DishPageQueryDTO;
import com.sky.entity.Dish;
import com.sky.vo.DishVO;
import org.apache.ibatis.annotations.*;

import java.util.List;

/*
 * 菜品管理的mapper
 * mapper层的作用：
 *  执行对应的sql语句查询数据库里的数据
 * */
@Mapper
public interface DishMapper {
    /**
     * 根据分类ID去菜品表dish查询菜品的数量
     *
     * @param id
     * @return Integer
     * @info 执行sql语句根据分类id，去dish菜品表查询所关联的菜品数量 菜品所属的分类id=分类id
     */
    @Select("select count(id) from dish where category_id=${id}")
    public Integer selectDishCountByCategoryId(Long id);


    /**
     * 查询所有菜品
     *
     * @param dishPageQueryDTO
     * @return Page<DishVO>
     * @info 执行sql语句往dish菜品表中查询所有菜品
     */
    public Page<DishVO> selectDishList(DishPageQueryDTO dishPageQueryDTO);

    /**
     * 起售和停售菜品
     *
     * @param status
     * @param id
     * @return void
     * @info 执行sql语句往dish菜品表中修改菜品状态
     */
    @Update("update dish set status=#{status},update_time=#{updateTime},update_user=#{updateUser} where id=#{id}")
    public void updateDishStatus(Dish dish);

    /**
     * 删除菜品
     *
     * @param id
     * @return void
     * @info 执行sql语句往dish菜品表中批量删除菜品
     */
    @Delete("delete from dish where id in (${ids})")
    public void deleteDishById(String ids);

    /**
     * 根据id查询菜品
     *
     * @param id
     * @return dish
     * @info 执行sql语句往dish菜品表中查询菜品
     */
    @Select("select * from dish where id=#{id}")
    public Dish selectDishById(Long id);

    /**
     * 根据id批量查询菜品
     *
     * @param ids
     * @return List<dish>
     * @info 执行sql语句往dish菜品表中查询菜品
     */
    @Select("select * from dish where id in (${ids})")
    public List<Dish> selectDishListByIds(String ids);


    /**
     * 添加菜品
     *
     * @param dish
     * @return void
     * @info 执行sql语句往dish菜品表中添加菜品
     */
    @Insert("insert into dish (name,category_id,price,image,description,status,create_time,update_time,create_user,update_user) values (#{name},#{categoryId},#{price},#{image},#{description},#{status},#{createTime},#{updateTime},#{createUser},#{updateUser})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    public void insertDish(Dish dish);

    /**
     * 修改菜品
     *
     * @param dish
     * @return void
     * @info 执行sql语句往dish菜品表中修改菜品
     */
    public void updateDish(Dish dish);

    /**
     * 根据套餐id查询菜品
     *
     * @param setmealId
     * @return
     */
    @Select("select a.* from dish a left join setmeal_dish b on a.id = b.dish_id where b.setmeal_id = #{setmealId}")
    public List<Dish> getBySetmealId(Long setmealId);


    /**
     * 根据分类id查询菜品
     *
     * @param setmealId
     * @return
     */

    @Select("select * from dish where category_id=#{setmealId}")
    public List<Dish> fetchDishByCategoryId(Long categoryId);
}
